热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

吃瓜笔记|旷视研究院:被遮挡人脸区域检测的技术细节(PPT+视频)

主讲人:袁野|旷视研究院研究员屈鑫编辑整理量子位出品|公众号QbitAI12月27日晚,量子位吃瓜社联合Face论文解读系列第四期开讲,本
主讲人:袁野 | 旷视研究院研究员
屈鑫 编辑整理
量子位 出品 | 公众号 QbitAI

12月27日晚,量子位·吃瓜社联合Face++论文解读系列第四期开讲,本期中旷视(Megvii)研究院解读了近期发表的Face Attention Network论文。

本篇论文所提出的Face Attention Network,是基于分层注意力机制的人脸图像区域检测器,能够在不影响速度的情况下显著提高被遮挡的人脸检测问题的召回率。

本期主讲人为旷视研究院研究员袁野,同时也是论文共同一作,wider face legend board第一。主要负责face detection工作。

量子位应读者要求,将精彩内容整理如下:

class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.7647058823529411" data-w="480" data-src="http://v.qq.com/iframe/player.html?vid=b0529ip7kbo&width=670&height=376.875&auto=0" style="display: none; width: 670px !important; height: 376.875px !important;" width="670" height="376.875" data-vh="376.875" data-vw="670" src="http://v.qq.com/iframe/player.html?vid=b0529ip7kbo&width=670&height=376.875&auto=0"/>
 分享视频回放

这篇论文中主要提出的是如何设计和使用Attention的机制去解决大尺度变化下的遮挡问题。论文通过精心设计的anchor setting和anchor level 的attention机制能够在不影响速度的情况下显著提高被遮挡的人脸的召回率。

Face detection的主要背景

从背景上来看,对于Face的检测,跟General detection一脉相承。从是否需要提取proposal和是否需要对这个proposal进行二次操作的角度来简单划分的话,主要分为One stage detector和Two stage detector。

这两个方法总体来说是各有利弊。One stage detector主要的优势是快速,这个主要是从工程上来说,假如你在手机上从一个256甚至更高维度的1024的 channel上直接crop一个feature出来,是一个相当耗时的工作,所以one stage天然就有很好的速度优势。

但是one stage有也存在不足,它由于没有后面refine的过程,在两个人脸或者是两个物体挨得比较近,或者是难以辨认的情况下,one stage通常会在性能上会有一定的劣势。

Face detection的挑战

在Face detection上面,相比于其他有哪些特别困难的地方?

首先是scale,由于face自身的特殊性,不论是通用物体或者行人检测,通常情况下,我们只是在意比较近处的物体。scale的变化远远没有人脸这么大。

其次是occlusion,也就是遮挡问题。遮挡问题简单地分为两部分:物体的遮挡;face的自遮挡。识别戴头巾或者口罩的人脸,这是一个典型的物体遮挡的问题。如果两个人挨得特别近,以至于把后面的人挡住了一部分,但是勉强还是可以看到另一部分,这就是face的自遮挡。

那么去解决这个遮挡问题,我们的motivation是什么?

对于遮挡的物体,我们首先需要确定这是不是一个脸,或者是至少要确定这是不是一个头。这就需要context信息,例如能够看到更多的地方,能看到身躯或者是看到头的整个区域,这样就有助于判断。这些信息可以通过合理的Anchor setting或者是合理的大感受野去隐式地学到。

此外,只看context信息也会产生一些误导,所以需要可见的部分来辅助确认这块区域真的是人脸,而不是其他的东西。这个时候我们可以考虑用segmentation或者是attention的机制去处理。

那么基于这个motivation应该怎么去设计网络?

这张图是我们主要的网络设计构架。从网络设计构架上面来说,前面这个红色和这个白色的区域,可以理解为一个FPN的结构,可以复用多层的信息,通过合理的anchor设计,保证每个anchor都有较大的感觉野,隐式地学习context信息。(c)这个部分是一个attention的子网络,我们在得到feature之后,会另开一支去学习attention,之后对attention做一个E指数的操作乘到原来的feature map上面,加强可见区域信息。

后面是一个类似于fast R-CNN两支操作:一支做classification,一支做regression。 Anchor setting设置可以保证每个人脸都有足够的感受野以及足够的context信息。底下这个attention的subnet,它可以通过有监督的信息,学到visible的information,也就能提高对遮挡物体检测的能力。

anchor setting

先统计一下Wider face本身,大概80%以上的人脸其实都是集中在16 pixel到406 pixel这样的量级上面,还有约10%的量级是在8pixel到16pixel。

所以我们在设计上的时候,需要考虑到如何让anchor去覆盖这么大的一个区域。Ratio上的设置,我们选择了1和1:1.5,其实是潜在地考虑了正脸和侧脸两种情况,因为通常情况下一个face,在正脸的情况下,1:1都是可以接受的。侧脸的情况下,可以近似到1:1.5。

P3、P4、P5、P6、P7是分别是表示我们FPN的各个layer,P3表示的是一个浅层的信息,然后P7表示的是越深层的信息。

在感受野上面,feature的感受野是anchor的4倍左右,例如P3层达到了接近99的水平,是P3 anchor的四倍大小。这样就可以提供足够的context信息来保证能够检测出轮廓。铺设密度上,没有选择传统的每一层只有一个anchor的铺设方式,采用每层3个scale,以2 ^ -1/3 步进。如果每层只铺设一个anchor,就会导致个别的ground truth,分配不到一个很好的anchor。

当然anchor也不是铺设得越密越好。如果把anchor铺设得更密一些,比如每层每个layer铺4个anchor,这样会导致的有很多的FP,最终导致性能下降。

还有一个问题是:我们统计出来的anchor只有16到406,而wider face上有大概10%的是在8到16或者是更低的程度,我们可以放弃这一部分吗?

如果这个face在8pixel量级的情况下,我们把它放大出来,图像就很糊,基本上也已经没有什么纹理的信息。加入训练会引来大量的噪声,反而会导致detector性能的下降。就实验结果来看下降还是比较明显的,大概会下降2到3个点。

Attention的操作

我们之前说过,只有context的信息,很难分辨这个物体到底是不是一个被遮挡人脸。这个时候需要加入一些attention,或者是加入一些segmentation,把这些区域给学出来,那么到底怎么学?

首先ground truth只有bounding box。那么我们就采用将bounding box的区域填1,直接作为segmentation去学。由于大量的ground truth是没有遮挡的,当发生遮挡时,最后学出来的segmentation会对于这些未遮挡的信息更加敏感。

其次还有一个细节,在我们的attention网络里面,做完attention之后,不是简单的点乘到原来的feature map上面,而是先做了一个E指数的操作,再去点乘到feature map上面。这样做就不是只保留attention高量的部分,而是对高量的部分做一些增强,这样能够很好地保留它原有的context信息,同时也能够突出它自身那个可见区域的信息。

然后是attention机制的整体框架。我们相比于其他的attention来说,attention不仅是有监督的,同时不同的层赋予不同的anchor level的监督信息。

我们来简单看一下左边这张图,是unsupervised的attention map,unsupervised attention基本上是在随机地学,这对我们来说就没有什么意义。右边这张图,是加了supervised的attention之后,对于一个遮挡的物体,它能够很好地focus到可见的部分。

其次,我们看这张图,左边是全部采用统一监督信号的结果,这表示如果我们把所有的layer都放上同样的监督信号,网络主要focus的是一些比较显著的脸;对于一些比较小的人脸学习的并不理想。右边是采用了anchor level attention的结果,不同的layer根据anchor去生成不同的ground truth。这保证在不同的layer上面,它focus的地方是不一样的,就减轻了这些大脸对小脸的干扰。

然后这是Ablation study的信息。从base model来看,它只有63点多,然后通过修正anchor,它能够达到79.8的水平。加入attention之后它会有一个80.9的涨幅。后面是scale test的一些技巧,最终可以达到88.8,相比于市面上最好的结果也要高出一个多点。

还有我们在两个主要数据集上的表现:在widerface数据集上,我们比第二名高了3个点,比现今legend board上第一高1.2个点。在mafa这个遮挡数据集上,我们比之前的AP提升了接近11个点左右。

接下来是Wider face上的检测结果:不论是尺度变化比较大,还是遮挡比较严重的情况都能够有很好的结果。

接下来是我们在MAFA上的处理的结果,也可以看到对于这些口罩或者是在被遮挡的问题上都能处理得还不错。

简单看一下之前做的一个小demo。这是在网上下载的北京地铁的一个日常的视频,可以看到我们的detect框在单个人上面是相当稳定的,即使在人流比较密集的情况,画质不好的情况下,我们依然能够做到挺不错的。

class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.7647058823529411" data-w="480" data-src="http://v.qq.com/iframe/player.html?vid=o052959kgm4&width=670&height=376.875&auto=0" style="display: block; width: 670px !important; height: 376.875px !important;" width="670" height="376.875" data-vh="376.875" data-vw="670" src="http://v.qq.com/iframe/player.html?vid=o052959kgm4&width=670&height=376.875&auto=0"/>

Paper总结

简单对paper做一些总结。

对于大尺度变化以及高遮挡的问题,detector是一个十分艰巨的任务。

  1. 对于这样的任务,首先需要保证它有足够的感受野来提供context信息,尤其是对小脸或者是遮挡的脸来说。

  2. 同时在anchor assign的策略上,比较密集的合理的分布,能够保证ground truth都有一个很好的proposal。

  3. Attention的机制可以帮助网络学到很好的可见区域。

  4. 最后是Multi anchor-level attention,这样能够让不同的layer去学face scale的information,使小脸更好地得到学习。

除总结之外,还有一些展望。

  1. 刚刚看到的视频上存在有很多的FP,这其实是一个很难调和的问题。比如说在识别小脸这种特别艰巨的问题的时候,为了保证recall,可能就会引入大量的anchor和大量的机制,这样就会导致FP激增。对于这样的问题还需要进一步的探索。

  2. 现在的Face Attention Network,它的base model是一个很大的model,如何小型化,也是我们下一步将要探索的一个地方。

一则招人硬广:
希望加入旷视科技(Megvii)一起登上CV巅峰的同学可以投简历至俞刚:yugang@megvii.com,长期招聘算法实习生。实习优秀者,更有直接跳过面试阶段,入职Megvii研究院的机会。

Q&A

小的人脸比较模糊,为了防止引入一些噪声,就把这些数据给去掉了,那这些小的人脸到底有多小,是怎么定义的?

一部分是实验本身得出来的结论,另一方面是本身我们是在8倍pixel上面去做的classification,对于8倍pixel以下的人脸,他在8倍的feature上,它可能最后就变成了1个pixel到2个pixel,本身这个任务就很艰难地完成,所以我们当时就简单地先按8 pixel来去做,后来实验表明的确这是一个很合理的setting。

Attention的机制和分割的联系?

Segmentation可以理解为一个简单的per pixel的classification,它有很好的标注信息。但是我们的attention是一个隐式的学习的过程,也就是说attention本身在ground truth的时候,给它大量无遮挡的脸和一些正脸的图像,让它去学习。我们在COCO上面其实是用到了segmentation,加入了segmentation之后会有一个很好的涨点。

如果技术落地的话,对哪些场景比较合适?

目前我们发paper的这个model是很难去做一些很实时的东西。以现在paper角度上来看,它可以做一些这样任务:安防入库;录入其他数据。也可以在云端上去做。如果说它可以小型化,就有很多很开阔的场景,比如说抓拍机,一些人脸解锁,无人化的超市等等。

框架是怎样的?

这个框架应该算one stage的detector。因为后面没有接ROI pooling或者是它之类的这些衍生物,主要是考虑到本身对于速度的要求。加上ROI pooling之后,对高feature数进行crop 的操作会非常耗时。所以我们就采用了one stage的detector。

相关学习资源

以上就是此次旷视研究院袁野带来分享的全部内容。在量子位公众号(QbitAI)界面回复“180107”可获得完整版PPT以及视频回放链接

第一期物体检测回顾:旷视研究院解读COCO2017物体检测算法夺冠论文

第二期人体姿态估计回顾:旷视研究院详解COCO2017人体姿态估计冠军论文

第三期Light-Head R-CNN回顾:旷视研究院解读Light-Head R-CNN:如何在物体检测中平衡精准度和速度

加入社群

量子位AI社群13群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot5入群;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进群请加小助手微信号qbitbot5,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态




推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • Word2vec from scratch (Skip-gram & CBOW)
    在自然語言處理領域中,如何透過向量表達一個詞彙,是近幾年非常火熱的議題,在distributedrepresentation(densevector)尚未風行前,大多數的任務都以1-hotencoding作為詞彙的表示,其方法得到了高維度的稀疏向量,雖容易理解、簡單計算,但也帶來許多副作用;直至2013年,ThomasMikolov等人提出了word2vec,word2vec引用了一個概念,作者導 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
author-avatar
UP向日葵氵于磊Z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有